home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / esc.jar / com / extensibility / xml / SchemaUtilities.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-06-30  |  8.5 KB  |  376 lines

  1. package com.extensibility.xml;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5. import java.io.Reader;
  6. import java.util.Enumeration;
  7. import java.util.Vector;
  8. import javax.xml.parsers.ParserConfigurationException;
  9. import javax.xml.parsers.SAXParser;
  10. import javax.xml.parsers.SAXParserFactory;
  11. import org.xml.sax.InputSource;
  12. import org.xml.sax.Parser;
  13. import org.xml.sax.SAXException;
  14. import org.xml.sax.helpers.ParserFactory;
  15.  
  16. public final class SchemaUtilities {
  17.    public static boolean sameFlavor(SchemaFlavorIntf var0, URI var1, boolean var2) {
  18.       String var3 = getFlavor(var1, var2);
  19.       if (var3 == null) {
  20.          return true;
  21.       } else {
  22.          return var0.getFlavorName().equals(var3);
  23.       }
  24.    }
  25.  
  26.    public static boolean compatibleFlavor(SchemaFlavorIntf var0, URI var1, boolean var2) {
  27.       if (sameFlavor(var0, var1, var2)) {
  28.          return true;
  29.       } else {
  30.          String var3 = getFlavor(var1, var2);
  31.          return FlavorRegistry.getDefaultRegistry().isCompatible(var0.getFlavorName(), var3);
  32.       }
  33.    }
  34.  
  35.    public static boolean isValidFlavor(String var0) {
  36.       return var0 != null && var0 != BaseFlavor.FLAVOR_UNDETERMINED && var0 != BaseFlavor.FLAVOR_INVALID;
  37.    }
  38.  
  39.    public static String getFlavor(URI var0, boolean var1) {
  40.       int var2 = var0.getShortName().lastIndexOf(46);
  41.       String var3 = var2 >= 0 ? var0.getShortName().substring(var2 + 1) : "";
  42.       if ((!var1 || !var3.equals("xsd")) && FlavorRegistry.getDefaultRegistry().flavorExists(var3)) {
  43.          return var3;
  44.       } else if (!var1) {
  45.          return BaseFlavor.FLAVOR_UNDETERMINED;
  46.       } else {
  47.          try {
  48.             String var4 = getFlavorPeek(var0);
  49.             return var4;
  50.          } catch (IOException var6) {
  51.             String var5 = BaseFlavor.FLAVOR_UNDETERMINED;
  52.             return var5;
  53.          }
  54.       }
  55.    }
  56.  
  57.    public static String getFlavorPeek(URI var0) throws IOException {
  58.       SchemaFlavorPeekHandler var1 = new SchemaFlavorPeekHandler(var0);
  59.       Reader var3 = null;
  60.  
  61.       String var4;
  62.       try {
  63.          Parser var2 = getParser();
  64.          var2.setEntityResolver(var1);
  65.          var2.setDocumentHandler(var1);
  66.          var3 = var0.createReader();
  67.          if (var3 != null) {
  68.             InputSource var17 = new InputSource(var3);
  69.             var17.setSystemId(var0.getFullName());
  70.             var2.parse(var17);
  71.             return var1.getFlavor();
  72.          }
  73.  
  74.          var4 = BaseFlavor.FLAVOR_INVALID;
  75.       } catch (SAXException var15) {
  76.          return var1.getFlavor();
  77.       } finally {
  78.          try {
  79.             if (var3 != null) {
  80.                var3.close();
  81.             }
  82.          } catch (IOException var14) {
  83.          }
  84.  
  85.       }
  86.  
  87.       return var4;
  88.    }
  89.  
  90.    public static ExportInterface getWriter(SchemaIntf var0, String var1) {
  91.       if (var1.equals(DTDFlavor.NAME)) {
  92.          return new DTDBridgeWriter(var0);
  93.       } else if (var1.equals("xsd")) {
  94.          return new XSDLWriter(var0);
  95.       } else if (var1.equals(XDRFlavor.NAME)) {
  96.          return new XDRWriter(var0);
  97.       } else if (var1.equals(DTDMLFlavor.NAME)) {
  98.          return new DTDMLWriter(var0);
  99.       } else if (var1.equals(RELAXFlavor.NAME)) {
  100.          return new RELAXWriter(var0);
  101.       } else if (var1.equals(BIZFlavor.NAME)) {
  102.          return new BIZWriter(var0);
  103.       } else if (var1.equals(OSCFlavor.NAME)) {
  104.          return new XDRWriter(var0);
  105.       } else if (var1.equals(MSSFlavor.NAME)) {
  106.          return new XDRWriter(var0);
  107.       } else if (var1.equals(SOX2Flavor.NAME)) {
  108.          return new SOX2Writer(var0);
  109.       } else if (var1.equals(DCDFlavor.NAME)) {
  110.          return new DCDWriter(var0);
  111.       } else if (var1.equals(DDMLFlavor.NAME)) {
  112.          return new DDMLWriter(var0);
  113.       } else {
  114.          return !var1.equals(FlavorRegistry.getDefaultRegistry().getNamedBaseFlavor(var1)) ? getWriter(var0, FlavorRegistry.getDefaultRegistry().getNamedBaseFlavor(var1)) : null;
  115.       }
  116.    }
  117.  
  118.    public static Parser getParser() {
  119.       try {
  120.          Parser var6 = ParserFactory.makeParser("com.ibm.xml.parsers.SAXParser");
  121.          return var6;
  122.       } catch (Exception var5) {
  123.          SAXParserFactory var0 = SAXParserFactory.newInstance();
  124.          var0.setValidating(false);
  125.  
  126.          try {
  127.             SAXParser var1 = var0.newSAXParser();
  128.             Parser var8 = var1.getParser();
  129.             return var8;
  130.          } catch (SAXException var3) {
  131.             Object var7 = null;
  132.             return (Parser)var7;
  133.          } catch (ParserConfigurationException var4) {
  134.             Object var2 = null;
  135.             return (Parser)var2;
  136.          }
  137.       }
  138.    }
  139.  
  140.    public static String[] getExtensions() {
  141.       return FlavorRegistry.getDefaultRegistry().getFlavorNames();
  142.    }
  143.  
  144.    public static String flavorConvertsTo(String var0) {
  145.       if (var0 == null) {
  146.          return null;
  147.       } else {
  148.          return !var0.equals("xsd.1999.05.06") && !var0.equals("xsd.1999.12.17") ? var0 : "xsd";
  149.       }
  150.    }
  151.  
  152.    public static Vector getRootCandidates(SchemaIntf var0) {
  153.       Vector var1 = new Vector();
  154.       Vector var2 = new Vector();
  155.       if (var0 != null) {
  156.          Enumeration var3 = var0.getElementDeclarations();
  157.  
  158.          while(var3.hasMoreElements()) {
  159.             ElementDeclaration var4 = (ElementDeclaration)var3.nextElement();
  160.             String var5 = ((BaseDeclaration)var4).getName();
  161.             if (var1.indexOf(var5) < 0) {
  162.                var2.addElement(var5);
  163.             }
  164.  
  165.             ContentModelTermEnum var6 = var4.getContentModel().getLeafTerms();
  166.  
  167.             while(var6.hasMoreElements()) {
  168.                ContentModelTerm var7 = (ContentModelTerm)var6.nextElement();
  169.                String var8 = var7.getNCName();
  170.                if (var2.indexOf(var8) >= 0) {
  171.                   var2.removeElement(var8);
  172.                }
  173.  
  174.                if (var1.indexOf(var8) < 0) {
  175.                   var1.addElement(var8);
  176.                }
  177.             }
  178.          }
  179.       }
  180.  
  181.       return var2;
  182.    }
  183.  
  184.    protected static int getRootScore(SchemaIntf var0, String var1) {
  185.       ElementDeclaration var2 = var0.getNamedElement(var1);
  186.       ContentModelTermEnum var3 = var2.getContentModel().getLeafTerms();
  187.  
  188.       int var4;
  189.       for(var4 = 0; var3.hasMoreElements(); ++var4) {
  190.          var3.nextElement();
  191.       }
  192.  
  193.       return var4;
  194.    }
  195.  
  196.    public static String getBestRootName(SchemaIntf var0) {
  197.       String var1 = null;
  198.       if (var0 != null) {
  199.          Vector var2 = getRootCandidates(var0);
  200.          if (var2.size() == 0) {
  201.             Enumeration var3 = var0.getElementDeclarations();
  202.             if (var3.hasMoreElements()) {
  203.                ElementDeclaration var4 = (ElementDeclaration)var3.nextElement();
  204.                var1 = ((BaseDeclaration)var4).getName();
  205.             }
  206.          } else if (var2.size() == 1) {
  207.             var1 = (String)var2.elementAt(0);
  208.          } else {
  209.             int var6 = -1;
  210.  
  211.             for(int var7 = 0; var7 < var2.size(); ++var7) {
  212.                int var5 = getRootScore(var0, (String)var2.elementAt(var7));
  213.                if (var1 == null || var5 > var6) {
  214.                   var6 = var5;
  215.                   var1 = (String)var2.elementAt(var7);
  216.                }
  217.             }
  218.          }
  219.       }
  220.  
  221.       return var1;
  222.    }
  223.  
  224.    public static String getInternalSubset(URI var0) {
  225.       try {
  226.          BufferedReader var1 = new BufferedReader(var0.createReader());
  227.          int var2 = -1;
  228.          int var3 = -1;
  229.          int var4 = -1;
  230.          StringBuffer var5 = new StringBuffer();
  231.  
  232.          while(true) {
  233.             String var6 = var1.readLine();
  234.             if (var6 == null) {
  235.                break;
  236.             }
  237.  
  238.             if (var2 == -1) {
  239.                var2 = var6.indexOf("<!DOCTYPE");
  240.             }
  241.  
  242.             if (var2 >= 0 && var3 == -1 && var4 == -1) {
  243.                var3 = var6.indexOf("SYSTEM");
  244.             }
  245.  
  246.             if (var3 >= 0 && var4 == -1) {
  247.                int var14 = var6.indexOf("\"");
  248.                int var15 = var6.indexOf("\"", var14 + 1);
  249.                int var9 = var6.indexOf("'");
  250.                int var10 = var6.indexOf("'", var9 + 1);
  251.                if (var9 != -1 && (var14 == -1 || var9 < var14)) {
  252.                   var15 = var10;
  253.                }
  254.  
  255.                if (var15 >= 0) {
  256.                   var3 = var15;
  257.                }
  258.  
  259.                var4 = var6.indexOf("[", var3 + 1);
  260.                if (var4 >= 0) {
  261.                   var5.append(var6.substring(var4 + 1));
  262.                   var5.append(System.getProperty("line.separator"));
  263.                } else {
  264.                   if (var6.indexOf("<", var3 + 1) >= 0) {
  265.                      Object var11 = null;
  266.                      return (String)var11;
  267.                   }
  268.  
  269.                   var3 = 0;
  270.                }
  271.             } else if (var4 == -1 && (var4 = var6.indexOf("[", var3 + 1)) >= 0) {
  272.                var5.append(var6.substring(var4 + 1));
  273.                var5.append(System.getProperty("line.separator"));
  274.             } else if (var6.indexOf("<!") < 0 && var6.indexOf("<?") < 0) {
  275.                if (var6.indexOf("<") >= 0) {
  276.                   String var7 = var5.toString();
  277.                   int var8 = var7.lastIndexOf("]");
  278.                   if (var8 == -1) {
  279.                      var7 = null;
  280.                   } else {
  281.                      var7 = var7.substring(0, var8);
  282.                   }
  283.  
  284.                   return var7;
  285.                }
  286.  
  287.                if (var4 >= 0) {
  288.                   var5.append(var6);
  289.                   var5.append(System.getProperty("line.separator"));
  290.                }
  291.             } else if (var4 >= 0) {
  292.                var5.append(var6);
  293.                var5.append(System.getProperty("line.separator"));
  294.             }
  295.          }
  296.       } catch (IOException var12) {
  297.       }
  298.  
  299.       return null;
  300.    }
  301.  
  302.    public static URI getExternalDTD(URI var0) {
  303.       try {
  304.          BufferedReader var1 = new BufferedReader(var0.createReader());
  305.          int var2 = -1;
  306.          int var3 = -1;
  307.  
  308.          while(true) {
  309.             String var4 = var1.readLine();
  310.             if (var4 == null) {
  311.                break;
  312.             }
  313.  
  314.             if (var2 == -1) {
  315.                var2 = var4.indexOf("<!DOCTYPE");
  316.             }
  317.  
  318.             if (var2 >= 0 && var3 == -1) {
  319.                var3 = var4.indexOf("SYSTEM");
  320.             }
  321.  
  322.             if (var3 >= 0) {
  323.                int var5 = var4.indexOf("\"");
  324.                int var6 = var4.indexOf("\"", var5 + 1);
  325.                int var7 = var4.indexOf("'");
  326.                int var8 = var4.indexOf("'", var7 + 1);
  327.                if (var7 != -1 && (var5 == -1 || var7 < var5)) {
  328.                   var5 = var7;
  329.                   var6 = var8;
  330.                }
  331.  
  332.                if (var5 >= 0 && var6 >= 0) {
  333.                   String var9 = var4.substring(var5 + 1, var6);
  334.                   if (var9.equals("")) {
  335.                      URI var15 = URI.makeStringURI("");
  336.                      return var15;
  337.                   }
  338.  
  339.                   if (var0.getScheme().equals(":xa-string")) {
  340.                      if (var0.getBaseURI() != null) {
  341.                         URI var14 = new URI(var0.getBaseURI(), var9);
  342.                         return var14;
  343.                      }
  344.  
  345.                      Object var13 = null;
  346.                      return (URI)var13;
  347.                   }
  348.  
  349.                   URI var10 = new URI(var0, var9);
  350.                   return var10;
  351.                }
  352.             } else if (var4.indexOf("<!") < 0 && var4.indexOf("<?") < 0 && var4.indexOf("<") >= 0) {
  353.                Object var12 = null;
  354.                return (URI)var12;
  355.             }
  356.          }
  357.       } catch (IOException var11) {
  358.       }
  359.  
  360.       return null;
  361.    }
  362.  
  363.    public static URI getSchemaNamespaceURI(SchemaIntf var0) {
  364.       URI var1 = var0.getNamespace();
  365.       if (var1 == null) {
  366.          var1 = var0.getURI();
  367.       }
  368.  
  369.       return var1;
  370.    }
  371.  
  372.    public static String getSchemaNamespace(SchemaIntf var0) {
  373.       return getSchemaNamespaceURI(var0).getFullName();
  374.    }
  375. }
  376.